
/* Generated by Interface Builder */

#import "Help.h"
#import "Main.h"
#import "Server.h"
#import <appkit/NXBrowser.h>
#import <appkit/NXBrowserCell.h>
#import <appkit/ScrollView.h>
#import <appkit/Text.h>
#import <appkit/Panel.h>
#import <appkit/Matrix.h>
#import <appkit/Application.h>
#import <sys/file.h>
#import <sys/param.h>
#import <libc.h>

@implementation Help

// Is interface loaded?
// If more than one help instance, make this an instance var.
int loaded=0;

/* Bring up the interface.*/
- show:sender
{
	if (loaded==0)
	{
		[NXApp loadNibSection:"Help.nib" owner:self];
	}
	[panel makeKeyAndOrderFront:self];
	[browser displayColumn:0];
	return self;
}


/* Display the content of a file in the scrolling view.*/
- loadFile:(char *)name
{
	int	fd;
	NXStream *st;
	
	fd = open(name, O_RDONLY, 0);
	if (fd >= 0)
	{
		if ((st = NXOpenFile(fd, NX_READONLY)) != 0)
		{
			[text readRichText:st];
			[text sizeToFit];
			// Set the `cursor' to the start of the text.
			[text setSel:0:0];
			// Adjust the scroll position so that start of text is visible.
			[text scrollSelToVisible];
			NXClose(st);
		}
		close(fd);
	}
	return self;
}

/*
This message is called by the entries in the `sections' section to display the appropriate help file.
*/
- helpme:sender
{
	char title[100], name[MAXPATHLEN];
	// The name of the help file is the same as the title of the section.
	[sender getPath:title toColumn:1];
	sprintf(name, "%s/Help%s", [appDelegate appdir], title);
	[self loadFile:name];
	return self;
}

// Respond to the browser's query about whether the data has been loaded. 
- (BOOL)browser:sender columnIsValid:(int)column
{
	return loaded!=0;
}

// Add a help section to the list. 
- addTopic:(char *)title at:(int)pos in:matrix for:browser
{
	id cell;
	[matrix insertRowAt:pos];
	cell = [matrix cellAt:pos:0];
	[cell setStringValue:title];
	[cell setLoaded:YES];
	[cell setLeaf:YES];
	return self;
}

// Fill the list of help sections.
- (int)browser:sender fillMatrix:matrix inColumn:(int)column
{
	[self addTopic:"What is NewFile" at:0 in:matrix for:sender];
	[self addTopic:"General use" at:1 in:matrix for:sender];
	[self addTopic:"Current directory" at:2 in:matrix for:sender];
	[self addTopic:"Defining file types" at:3 in:matrix for:sender];
	[self addTopic:"Updating Services" at:4 in:matrix for:sender];
	[self addTopic:"Command keys" at:5 in:matrix for:sender];
	[self addTopic:"Things to do" at:6 in:matrix for:sender];
	[self addTopic:"Info" at:7 in:matrix for:sender];
	loaded++;
	// Return the number of sections.
	return 8;
}

// Intercept the scrolling view's initialization to get its doc view.
- setScrollingview:anObject
{
	scrollingview = anObject;
	text = [scrollingview docView];
	return self;
}

@end
